package top.huhuiyu.ds.sort;

/**
 * 相等性测试的演示
 * 
 * @author Aiden Pearce
 *
 */
public class EqDemo {
  public static void main(String[] args) {
    // 只要是通过new关键字创建的对象==测试就一定是false
    // equals是用来判断对象的值是否相同
    // ==是用来判断是否为同一个对象
    String sa = "ab";
    String sb = "ab";
    System.out.println(sa == sb);
    System.out.println(sa.equals(sb));
    System.out.println("==========");
    String sc = new String("ab");
    String sd = new String("ab");
    System.out.println(sc == sd);
    System.out.println(sc.equals(sd));
    System.out.println("==========");
    /**
     * 类如果没有复写equals方法，那么是继承自object对象的方法
     * 而object的equals方法就是调用==实现
     * 所以下面的测试都是false
     * 系统的数据类型对象基本都是覆写了equals，所以string的equals可以正常
     */
    NotEqEntiy e1 = new NotEqEntiy(100, "abc");
    NotEqEntiy e2 = new NotEqEntiy(100, "abc");
    System.out.println(e1 == e2);
    System.out.println(e1.equals(e2));
    System.out.println("==========");
    EqEntity e3=new EqEntity(100,"abc");
    EqEntity e4=new EqEntity(100,"abc");
    System.out.println(e3==e4);
    System.out.println(e3.equals(e4));
    /**
     * java规范规定：equals方法返回true的两个对象的hashCode值必须是一样的
     * 也就是说相等对象的hashCode一定是一样的
     * 反过来不用成立，也就是hashCode相等的两个对象equals测试不一定相等
     * 因为hashCode是一个数，通过一定的算法计算出来
     * 不同对象携带的数据加上算法计算可能计算出同一个值
     */
    System.out.println(e1.hashCode());
    System.out.println(e2.hashCode());
    System.out.println(e3.hashCode());
    System.out.println(e4.hashCode());
  }
}
